package secondStage.part4.字节流;

import java.io.*;

/**
 * @ClassName: [BufferedOutputStreamDemo]
 * @Description: 字节缓冲流读数据和写数据
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-04]
 * @Version: [v1.0]
 */
/*
2.7字节缓冲流
字节缓冲流:
    ●BufferOutputStream: 该类实现缓冲输出流。通过设置这样的输出流，应用程序可以向底层输出流写入字节，而不必
    为写入的每个字节导致底层系统的调用
    ●BufferedInputStream:创建BufferedInputStream将创建一 个内部缓冲区数组。 当从流中读取或跳过字节时, 内部缓
    冲区将根据需要从所包含的输入流中重新填充，一次很多个字节
构造方法:
    ●字节缓冲输出流: BufferedOutputStream(OutputStream out)
    ●字节缓冲输入流: BufferedInputStream(InputStream in)
为什么构造方法需要的是字节流，而不是具体的文件或者路径呢?
    ●字节缓冲流仅仅提供缓冲区， 而真正的读写数据还得依靠基本的字节流对象进行操作
*/
public class BufferedOutputStreamDemo {
    public static void main(String[] args) throws IOException {
        //字节缓冲输出流: BufferedOutputStream(OutputStream out)
        //FileOutputStream fos = new FileOutputStream("java.txt");//java.txt文件位置D:\IdeaProjects\JavaBaseStudy\java.txt
        //BufferedOutputStream bfos = new BufferedOutputStream(fos);
        /*BufferedOutputStream bfos = new BufferedOutputStream(new FileOutputStream("java.txt"));
        //写数据
        bfos.write("hello\r\n".getBytes());
        bfos.write("word\r\n".getBytes());
        bfos.close();
*/
        //字节缓冲输入流: BufferedInputStream(InputStream in)
        BufferedInputStream bfis = new BufferedInputStream(new FileInputStream("java.txt"));
        //读数据
        /*int by;
        while ((by=bfis.read())!=-1){
            System.out.print((char)by);
        }*/
        //一次读取一个字节数组
        byte[] bys = new byte[1024];
        int len;
        while ((len = bfis.read(bys)) != -1) {
            System.out.print(new String(bys, 0, len));
        }
        bfis.close();
    }
}
